public class PropertyOrFieldReference extends SpelNodeImpl
Modifier and Type | Class and Description |
---|---|
private static class |
PropertyOrFieldReference.AccessorLValue |
Modifier and Type | Field and Description |
---|---|
private PropertyAccessor |
cachedReadAccessor |
private PropertyAccessor |
cachedWriteAccessor |
private java.lang.String |
name |
private boolean |
nullSafe |
children, exitTypeDescriptor, pos
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8
Constructor and Description |
---|
PropertyOrFieldReference(boolean nullSafe,
java.lang.String propertyOrFieldName,
int pos) |
Modifier and Type | Method and Description |
---|---|
void |
generateCode(MethodVisitor mv,
CodeFlow codeflow)
Generate the bytecode for this node into the supplied visitor.
|
java.lang.String |
getName() |
private java.util.List<PropertyAccessor> |
getPropertyAccessorsToTry(java.lang.Object contextObject,
java.util.List<PropertyAccessor> propertyAccessors)
Determines the set of property resolvers that should be used to try and access a property
on the specified target type.
|
TypedValue |
getValueInternal(ExpressionState state) |
private TypedValue |
getValueInternal(TypedValue contextObject,
EvaluationContext eContext,
boolean isAutoGrowNullReferences) |
ValueRef |
getValueRef(ExpressionState state) |
boolean |
isCompilable()
Check whether a node can be compiled to bytecode.
|
boolean |
isNullSafe() |
boolean |
isWritable(ExpressionState state)
Determine if this expression node will support a setValue() call.
|
boolean |
isWritableProperty(java.lang.String name,
TypedValue contextObject,
EvaluationContext eContext) |
private TypedValue |
readProperty(TypedValue contextObject,
EvaluationContext eContext,
java.lang.String name)
Attempt to read the named property from the current context object.
|
void |
setValue(ExpressionState state,
java.lang.Object newValue)
Evaluate the expression to a node and then set the new value on that node.
|
java.lang.String |
toStringAST() |
private void |
writeProperty(TypedValue contextObject,
EvaluationContext eContext,
java.lang.String name,
java.lang.Object newValue) |
getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getPreviousChild, getStartPosition, getTypedValue, getValue, getValue, nextChildIs
private final boolean nullSafe
private final java.lang.String name
private volatile PropertyAccessor cachedReadAccessor
private volatile PropertyAccessor cachedWriteAccessor
public PropertyOrFieldReference(boolean nullSafe, java.lang.String propertyOrFieldName, int pos)
public boolean isNullSafe()
public java.lang.String getName()
public ValueRef getValueRef(ExpressionState state) throws EvaluationException
getValueRef
in class SpelNodeImpl
EvaluationException
public TypedValue getValueInternal(ExpressionState state) throws EvaluationException
getValueInternal
in class SpelNodeImpl
EvaluationException
private TypedValue getValueInternal(TypedValue contextObject, EvaluationContext eContext, boolean isAutoGrowNullReferences) throws EvaluationException
EvaluationException
public void setValue(ExpressionState state, java.lang.Object newValue) throws SpelEvaluationException
SpelNode
setValue
in interface SpelNode
setValue
in class SpelNodeImpl
state
- the current expression state (includes the context)newValue
- the new valueSpelEvaluationException
public boolean isWritable(ExpressionState state) throws SpelEvaluationException
SpelNode
isWritable
in interface SpelNode
isWritable
in class SpelNodeImpl
state
- the current expression state (includes the context)SpelEvaluationException
public java.lang.String toStringAST()
private TypedValue readProperty(TypedValue contextObject, EvaluationContext eContext, java.lang.String name) throws EvaluationException
SpelEvaluationException
- if any problem accessing the property or it cannot be foundEvaluationException
private void writeProperty(TypedValue contextObject, EvaluationContext eContext, java.lang.String name, java.lang.Object newValue) throws SpelEvaluationException
SpelEvaluationException
public boolean isWritableProperty(java.lang.String name, TypedValue contextObject, EvaluationContext eContext) throws SpelEvaluationException
SpelEvaluationException
private java.util.List<PropertyAccessor> getPropertyAccessorsToTry(java.lang.Object contextObject, java.util.List<PropertyAccessor> propertyAccessors)
contextObject
- the object upon which property access is being attemptedpublic boolean isCompilable()
SpelNodeImpl
isCompilable
in class SpelNodeImpl
public void generateCode(MethodVisitor mv, CodeFlow codeflow)
SpelNodeImpl
generateCode
in class SpelNodeImpl
mv
- the ASM MethodVisitor into which code should be generatedcodeflow
- a context object with info about what is on the stack